//*************************************************************************//
//*           _____   ____________            ______               __     *//
//*          / /__ \ / ____/ ____/           / ____/___  _________/ /     *//
//*     __  / /__/ // __/ / __/    ______   / /_  / __ \/ ___/ __  /      *//
//*    / /_/ // __// /___/ /___   /_____/  / __/ / /_/ / /  / /_/ /       *//
//*    \____//____/_____/_____/           /_/    \____/_/   \__,_/        *//
//*                                                                       *//
//*     Copyright (c) 2006 Ford Argentina. All Rights Reserved.           *//
//*                                                                       *//
//*************************************************************************//

package ar.com.ford.it.webengine.security.menu;

import ar.com.ford.it.webengine.wslx.WslxUser;
import com.ford.it.logging.ILogger;
import com.ford.it.logging.Level;
import com.ford.it.logging.LogFactory;
import com.ford.it.security.plugins.AbstractAuthorizationProvider;
import com.ford.it.security.plugins.AuthorizationException;
import com.ford.it.security.plugins.DataConditions;


/**
 * MenuAuthorizationProviderImpl <br>
 * 
 * Permite autorizar el acceso de un usuario a un menu. Los accesos se configuran dentro del 
 * archivo de definicion del menu (menu-definition.xml) y se validan contra los permisos
 * (especificos de menu) que tiene el WslxUser de la sesion.
 * 
 * @author aJi
 */
public class MenuAuthorizationProviderImpl extends AbstractAuthorizationProvider {

    private static final String CLASS_NAME = MenuAuthorizationProviderImpl.class.getName();
    private static final ILogger log = LogFactory.getInstance().getLogger(CLASS_NAME);

    private WslxUser user;
    
	/**
	 * Constructor
	 * @param user Usuario que esta usando la aplicacion
	 * @throws AuthorizationException
	 */
    public MenuAuthorizationProviderImpl(WslxUser user) throws AuthorizationException{
        String METHOD_NAME = "MenuAuthorizationProviderImpl";

        log.entering(CLASS_NAME, METHOD_NAME);
        
        this.user = user;

        log.exiting(CLASS_NAME, METHOD_NAME);
    }

    /**
     * Autorizar el acceso a un item del menu
     * @param resourceID Menu que se esta autorizando
     * @param privilege Lista separada por comas de los permisos requeridos.
     * @return true si el usuario esta autorizado para ver el item
     * @throws com.ford.it.security.plugins.AuthorizationException
     */
    public boolean isAuthorized(String resourceID, String privilege) throws AuthorizationException {
        String METHOD_NAME="isAuthorized";
        
        log.entering(CLASS_NAME, METHOD_NAME);
        boolean result;

		result = user.getMenuAccess().contains(privilege);

        log.exiting(CLASS_NAME, METHOD_NAME, Boolean.toString(result));

        return result;
    }

    /**
     * Autorizar el acceso a un item del menu, especificando condiciones adicionales
     * @param resourceID Menu que se esta autorizando
     * @param privilege Lista separada por comas de los permisos requeridos.
     * @param dataConds Condiciones adicionales para la autorizacion
     * @return true si el usuario esta autorizado para ver el item
     * @throws com.ford.it.security.plugins.AuthorizationException
     */
    public boolean isAuthorized(String resourceID, String privilege, DataConditions dataConds) throws AuthorizationException {
        String METHOD_NAME="isAuthorized";
        

        log.entering(CLASS_NAME, METHOD_NAME);
		log.logp(Level.WARNING, CLASS_NAME, METHOD_NAME, "no implementado");

        
        log.exiting(CLASS_NAME, METHOD_NAME, "true");
        return true;
    }

    /**
     * Autorizar el acceso a un item sin especificar los permisos (No soportado)
     * @param resourceID Nombre del menu
     * @return no implentado
     * @throws com.ford.it.security.plugins.AuthorizationException
     */
    public boolean isAuthorized(String resourceID) throws AuthorizationException {
        String METHOD_NAME="isAuthorized(String)";
        log.entering(CLASS_NAME, METHOD_NAME);

        throw new AuthorizationException("Operation not supported: Menu privileges required");
    }

    /**
     * Autorizar el acceso a un item sin especificar los permisos (No soportado)
     * @param resourceID Nombre del menu
     * @param dataConds Condiciones adicionales para la autorizacion
     * @return no implementado
     * @throws com.ford.it.security.plugins.AuthorizationException
     */
    public boolean isAuthorized(String resourceID, DataConditions dataConds) throws AuthorizationException {
        String METHOD_NAME="isAuthorized(String,DataConditions)";
        log.entering(CLASS_NAME, METHOD_NAME);
        
        throw new AuthorizationException("Operation not supported: Menu privileges required");
    }

}